/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package geografia;

import hibernate.Busqueda;
import java.util.HashMap;
import java.util.List;
import modelo.CriterioBusqueda;
import modelo.GestorModelo;

/**
 *
 * @author Raul
 */
public class GestorLocalidad extends GestorModelo<Localidad> {

    private String [] filtros = {"Codigo Postal", "Nombre", "Provincia"};
    private HashMap<String, String> variablesDeFiltro;

    public GestorLocalidad() {
        variablesDeFiltro = new HashMap();
        variablesDeFiltro.put("Codigo Postal", "codigoPostal");
        variablesDeFiltro.put("Nombre", "nombre");
        variablesDeFiltro.put("Provincia", "pr.nombre");
    }

    @Override
    public void eliminar() {
        getModelo().setEstado(ELIMINADO);
        this.actualizar();
    }
    
    @Override
    public void crearModelo() {
        setModelo(new Localidad());
    }

    public List listarLocalidades(){
        return super.listarClase(Localidad.class);
    }
    
    public List listarProvincias(){
        return super.listarClase(Provincia.class);
    }

    public String[] getFiltros() {
        return filtros;
    }
    
    public List<Localidad> buscar(String filtro, String valor){
        Busqueda busq = new Busqueda(Localidad.class);
        busq.crearAlias("provincia", "pr");
        busq.addEq("estado", ACTIVO);
        busq.addIlike(variablesDeFiltro.get(filtro), valor);
        busq.agregarOrdenAsc("pr.nombre");
        busq.agregarOrdenAsc("nombre");
        return busq.ejecutar();
    }
    
    public List<Localidad> buscar(String filtro, Object valor){
        Busqueda busq = new Busqueda(Localidad.class);
        busq.crearAlias("provincia", "pr");
        busq.addEq("estado", ACTIVO);
        busq.addEq(variablesDeFiltro.get(filtro), valor);
        busq.agregarOrdenAsc("pr.nombre");
        busq.agregarOrdenAsc("nombre");
        return busq.ejecutar();
    }

    @Override
    public boolean noExiste() {
        Busqueda busq = new Busqueda(Localidad.class);
        busq.crearAlias("provincia", "pr");
        busq.addEq("codigoPostal", getModelo().getCodigoPostal());
        busq.addEq("nombre", getModelo().getNombre());
        busq.addEq("pr.nombre", getModelo().getProvincia().getNombre());
        return busq.ejecutar().isEmpty();
    }

    @Override
    protected Localidad clonar(Localidad modelo) throws CloneNotSupportedException {
        return (Localidad) modelo.clone();
    }

    @Override
    public List buscar(CriterioBusqueda[] criterios) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
